package com.yidu.ladder.base.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.ladder.base.domain.Riparea;
import com.yidu.ladder.base.domain.Subarea;
import com.yidu.ladder.base.domain.SubareaVo;
import com.yidu.ladder.base.service.SubareaService;
import com.yidu.ladder.util.IDGenerator;
import com.yidu.ladder.util.PinYin4jUtils;
/**
 * 分区控制器
 * @author lw
 * @since 2020/1/10 
 */
@Controller
@RequestMapping("/base")
public class SubareaController {
	
	/**
	 * 将分区业务层依赖注入
	 */
	@Autowired
	private SubareaService subareaService;
	
	public SubareaController() {
		super();
	}

	public SubareaController(SubareaService subareaService) {
		super();
		this.subareaService = subareaService;
	}

	public SubareaService getSubareaService() {
		return subareaService;
	}

	public void setSubareaService(SubareaService subareaService) {
		this.subareaService = subareaService;
	}
	
	/**
	 * 组合条件查询所有带分页
	 * @param subareaVo
	 * @return
	 */
	@GetMapping("/subareas")
	@ResponseBody
	public Map<String, Object> findAllSubarea(SubareaVo subareaVo){
		Map<String, Object> result = subareaService.findAllSubareaWithRiparea(subareaVo);
		return result;
	}
	
	/**
	 * 添加分区
	 * @param subarea
	 * @return
	 */
	@PostMapping("/subarea")
	@ResponseBody
	public int saveSubarea(Subarea subarea) {
		//定义一个Map集合接受省市县
		Map<String,Object> param = new HashMap<String, Object>();
		//调用PinYin4j工具类的方法来获取省的首字母大写
		String[] provinces = PinYin4jUtils.getHeadByString(subarea.getProvince());
		//调用PinYin4j工具类的方法来获取市的首字母大写
		String[] citys = PinYin4jUtils.getHeadByString(subarea.getCity());
		//调用PinYin4j工具类的方法来获取市的县字母大写
		String[] districts = PinYin4jUtils.getHeadByString(subarea.getDistrict());
		
		//定义空的字符串来接收省的简码
		String shortCodeP = "";
		//用for循环来获取省的字母
		for (int i = 0; i < provinces.length-1; i++) {
			//将处理过后的省简码放入到空的字符串中
			shortCodeP = shortCodeP + provinces[i];
		}
		//定义空的字符串来接收市的简码
		String shortCodeC = "";
		//用for循环来获取市的字母
		for (int i = 0; i < citys.length-1; i++) {
			//将处理过后的市简码放入到空的字符串中
			shortCodeC = shortCodeC + citys[i];
		}
		//定义空的字符串来接收县的简码
		String shortCodeD = "";
		//用for循环来获取县的字母
		for (int i = 0; i < districts.length-1; i++) {
			//将处理过后的县简码放入到空的字符串中
			shortCodeD = shortCodeD + districts[i];
		}
		//将得到的省、市、县赋值给简码
		subarea.setMnemoniCode(shortCodeP+shortCodeC+shortCodeD);
		//给ID赋值
		subarea.setSubareaId(IDGenerator.getId());
		//将省市县添加到map集合中
		param.put("province", subarea.getProvince());
		param.put("city", subarea.getCity());
		param.put("district", subarea.getDistrict());
		//调用方法查询区域Id
		String areaId = subareaService.findAreaByPCD(param);
		//给区域Id赋值
		subarea.setAreaId(areaId);
		//给状态赋值
		subarea.setUseable("Y");
		//调用添加方法
		int result = subareaService.saveSubarea(subarea);
		return result;
	}
	
	/**
	 * 修改分区
	 * @param subarea
	 * @return
	 */
	@PutMapping("/subarea")
	@ResponseBody
	public boolean updateSubarea(Subarea subarea) {
		boolean result = subareaService.updataSubarea(subarea);
		return result;
	}
	
	/**
	 * 逻辑删除
	 * @param subareaIdStr
	 * @return
	 */
	@PostMapping("/frozenORrecoverSubarea")
	@ResponseBody
	public boolean frozenORrecoverSubarea(String subareaIdStr) {
		boolean result = subareaService.frozenORrecoverSubarea(subareaIdStr, true);
		return result;
	}
	
	/**
	 * 还原
	 * @param subareaIdStr
	 * @return
	 */
	@PostMapping("/restoreRrecoverSubarea")
	@ResponseBody
	public boolean restoreRrecoverSubarea(String subareaIdStr) {
		boolean result = subareaService.frozenORrecoverSubarea(subareaIdStr, false);
		return result;
	}
	
	/**
	 * 查询所有的定区名
	 * @return
	 */
	@GetMapping("/findAllRipareaName")
	@ResponseBody
	public List<Riparea> findAllRipareaName(){
		List<Riparea> result = subareaService.finAllRipareaName();
		return result;
	}
	
	/**
	 * 根据分区Id修改区域Id
	 * @param subareaId
	 * @param ripAreaId
	 * @return
	 */
	@PostMapping("/manageSubarea")
	@ResponseBody
	public boolean manageSubarea(String subareaId,String ripAreaId) {
		boolean result = subareaService.updateManageSubarea(subareaId, ripAreaId);
		return result;
	}
}
